Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 10.08.2018, 14:55
Новичок на форуме
Отправить личное сообщение для Amalyshok Посмотреть профиль Найти все сообщения от Amalyshok
 
Регистрация: 10.08.2018
Сообщений: 1

чтение заголовков ответа (fetch)
Доброго времени суток. Разрабатываю расширение для хром, в котором со стороннего сайта подгружаю спортивную статистику. На сайте ограничение на количество запросов в минуту. В заголовках ответов есть инфа об оставшихся запросах в минуту и секундах до сброса таймера на запросы. Реализовав запрос через fetch, столкнулся с тем, что заголовки ответов прочесть не удается. Вот код:

function parserGo(url) {
    fetch(url, {
        method: "GET",
        headers: {
            'X-Auth-Token': 'f82baa0467604922be083'
        }
    }).then(response => {
        let arr = [
            'x-authenticated-client',
            'date',
            'server',
            'x-api-version',
            'x-requestcounter-reset',
            'x-requests-available-minute',
            'access-control-allow-methods',
            'content-language',
            'access-control-allow-origin',
            'transfer-encoding',
            'connection',
            'access-control-allow-credentials',
            'content-type',
            'x-application-context'
        ];
        for (let i = 0; i < arr.length; i++) {
            console.log(response.headers.get(arr[i]));
        }
        return response.json();
    }, function(error) {
        error.message 
    }).then(d => {
       // обработка json'а
    });
}


Из всего массива имен заголовков читается только два:
1. 'content-language';
2. 'content-type'.

Вычитал следующее Существует ограничение на доступ к заголовкам ответов при использовании Fetch API над CORS. Из-за этого ограничения вы можете получить доступ только к стандартным заголовкам:

Cache-Control
Content-Language
Content-Type
Expires
Last-Modified
Pragma


Пробовал читать заголовки через XMLHttpRequest:
function getHeaders(url) {
var req = new XMLHttpRequest();
req.open('GET', url, false);
req.setRequestHeader('X-Auth-Token', 'f82baa0467604922be083');
req.send(null);
var headers = req.getAllResponseHeaders();
console.log(headers);
}

все работает отлично.

Господа умы, подскажите, работая с fetch я обречен быть "слепым" в плане необходимых мне 'x-requestcounter-reset' и 'x-requests-available-minute' ?
И почему XMLHttpRequest имеет доступ к заголовкам ответа, а fetch нет, если XMLHttpRequest и Fetch API следуют политике одного источника (same-origin policy).

Последний раз редактировалось Amalyshok, 10.08.2018 в 15:11.
Ответить с цитированием
  #2 (permalink)  
Старый 16.08.2018, 16:40
Аватар для SuperZen
Профессор
Отправить личное сообщение для SuperZen Посмотреть профиль Найти все сообщения от SuperZen
 
Регистрация: 08.11.2017
Сообщений: 641

https://developer.mozilla.org/en-US/...sponse/headers

чтобы прочитать хидеры:
response.headers.forEach(console.log);

а это на стороне сервера (access-control-expose-headers), можно указать какие именно хидеры будут высылаться на клиент, по дефолту только:
Cache-Control
Content-Language
Content-Type
Expires
Last-Modified
Pragma

Последний раз редактировалось SuperZen, 16.08.2018 в 16:43.
Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Проверка на checked внутри блока div Batyabest Events/DOM/Window 6 28.12.2017 21:12
Авторизация в ВК с помощью fetch() caseyryan Общие вопросы Javascript 1 29.06.2017 10:38
Код ответа сервера и обновление iframe alexdemi911 Общие вопросы Javascript 6 10.08.2015 22:30
Обновление страницы после получения ответа от сервера potrashitel AJAX и COMET 9 24.02.2015 10:04
Кэширование заголовков, не тела, ЗАГОЛОВКОВ! Slawaq Серверные языки и технологии 5 05.01.2012 19:41